#include "Game.h"
#include "Animacion.h"
#include "Textura.h"

#include <gl/freeglut.h>
#include <iostream>

using namespace std;

Animacion::Animacion( TiXmlElement *animacion)
	{
		frameActual = 0;
		animTime	= 0.f;		
		
		nombre		= animacion->FirstChildElement("nombre")->GetText();
		totalFrames = atoi(animacion->FirstChildElement("frames")->GetText());
		anchoFrame	= atoi(animacion->FirstChildElement("anchoFrame")->GetText());
		altoFrame	= atoi(animacion->FirstChildElement("altoFrame")->GetText());
		duracion    = atof(animacion->FirstChildElement("duracion")->GetText());
		fila		= atoi(animacion->FirstChildElement("fila")->GetText());
		string ruta(animacion->FirstChildElement("ruta")->GetText());
		
		/* Carga de la textura */
		size_t posicion = ruta.find_last_of('/');
		string nombreFichero = ruta.substr(posicion + 1);

		t = static_cast<Textura*>(g->getRecursos()->getResource(nombreFichero,RECURSOS::TEXTURA));	

		totalFilas 	= t->getAlto()/altoFrame;

	
	}


void Animacion::update( float speedFactor )
	{
		if (reproduciondose){
			this->animTime += (speedFactor * 16.f);// * (duracion/totalFrames);
			if (animTime > (duracion))
				animTime = 0.f;
			frameActual = animTime/(duracion/totalFrames);
		}
	}

void Animacion::render(float x, float y)
	{
		
		t->bind();

		float unidadAncho = t->getUnidadAncho()/(float)totalFrames;
		float unidadAlto = t->getUnidadAlto()/totalFilas;
		
		float x1 =	(float)(frameActual)*(unidadAncho);
		float x2 =	x1 + (unidadAncho);
		
		float y1 =	(float)(fila)*(unidadAlto);
		float y2 =	y1 + (unidadAlto);
		
		glBegin(GL_QUADS);
			glTexCoord2f(x1,y2);
			glVertex2f(x,y + altoFrame);

			glTexCoord2f(x2,y2);
			glVertex2f(x + anchoFrame,y + altoFrame);

			glTexCoord2f(x2,y1);
			glVertex2f(x + anchoFrame,y);

			glTexCoord2f(x1,y1);
			glVertex2f(x,y);
		glEnd();
		
	}

Animacion::~Animacion(void)
	{
	t->descargar();
	}